package com.itheima.api.treeset.demo03;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * 使用TreeSet集合的比较器对元素进行排序操作
 *
 * 使用比较器的时候，我们需要去使用TreeSet集合的另外一个构造方法
 * public TreeSet(Comparator<? super E> comparator):    根据指定的比较器进行排序
 *
 */
public class TreeSetDemo01 {

    // 需求：使用TreeSet存储自定义对象(Student)并遍历(保证元素的唯一性)；
    /**
     * 1. 定义一个学生类
     * 2. 创建学生对象
     * 3. 创建TreeSet集合对象
     * 4. 把学生对象添加到TreeSet集合对象
     * 5. 遍历
     */
    public static void main(String[] args) {

        // 创建学生对象
        Student s1 = new Student("aliali" , 23 ) ;
        Student s2 = new Student("mayun" , 18 ) ;
        Student s3 = new Student("bilibili" , 20) ;
        Student s4 = new Student("ahangsan" , 20) ;

        // 创建TreeSet集合对象
        // public TreeSet(Comparator<? super E> comparator):    根据指定的比较器进行排序
//        TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>(){
//
//            @Override
//            public int compare(Student s1, Student s2) {
//
//                // 先比较年龄
//                int result = s1.getAge() - s2.getAge() ;
//
//                /**
//                 * 两个对象的年龄是相同的，也不能说明是同一个对象，因此当年龄相同的时候，我们需要比较姓名
//                 * 年龄是主要条件，姓名就是次要条件
//                 */
//                int result2 = result == 0 ? s1.getName().compareTo(s2.getName()) : result ;
//
//                // 返回
//                return result2;
//            }
//
//        }) ;

        TreeSet<Student> treeSet = new TreeSet<Student>( (o1 , o2) -> {
            // 先比较年龄
            int result = o1.getAge() - o2.getAge() ;
            int result2 = result == 0 ? o1.getName().compareTo(o2.getName()) : result ;
            return result2;
        }) ;

        // 把学生对象添加到TreeSet集合对象
        treeSet.add(s1) ;
        treeSet.add(s2) ;
        treeSet.add(s3) ;
        treeSet.add(s4) ;

        // 遍历
        treeSet.forEach( s -> System.out.println(s));

    }

}
